home *** CD-ROM | disk | FTP | other *** search
/ LG Super CD / LG Super CD.iso / bitpim / bitpim-0.62-setup.exe / {app} / bitpim.exe / wxPython / lib / intctrl.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-11-06  |  19.6 KB  |  511 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.3)
  3.  
  4. from wxPython.wx import *
  5. import types
  6. import string
  7. from sys import maxint
  8. MAXINT = maxint
  9. MININT = -maxint - 1
  10. wxEVT_COMMAND_INT_UPDATED = wxNewEventType()
  11. WXK_CTRL_X = ord('X') + 1 - ord('A')
  12. WXK_CTRL_V = ord('V') + 1 - ord('A')
  13.  
  14. def EVT_INT(win, id, func):
  15.     win.Connect(id, -1, wxEVT_COMMAND_INT_UPDATED, func)
  16.  
  17.  
  18. class wxIntUpdatedEvent(wxPyCommandEvent):
  19.     
  20.     def __init__(self, id, value = 0, object = None):
  21.         wxPyCommandEvent.__init__(self, wxEVT_COMMAND_INT_UPDATED, id)
  22.         self._wxIntUpdatedEvent__value = value
  23.         self.SetEventObject(object)
  24.  
  25.     
  26.     def GetValue(self):
  27.         return self._wxIntUpdatedEvent__value
  28.  
  29.  
  30.  
  31. class wxIntValidator(wxPyValidator):
  32.     
  33.     def __init__(self):
  34.         wxPyValidator.__init__(self)
  35.         EVT_CHAR(self, self.OnChar)
  36.  
  37.     
  38.     def Clone(self):
  39.         return self.__class__()
  40.  
  41.     
  42.     def Validate(self, window):
  43.         return 1
  44.  
  45.     
  46.     def OnChar(self, event):
  47.         key = event.KeyCode()
  48.         ctrl = event.GetEventObject()
  49.         value = ctrl.GetValue()
  50.         textval = wxTextCtrl.GetValue(ctrl)
  51.         allow_none = ctrl.IsNoneAllowed()
  52.         pos = ctrl.GetInsertionPoint()
  53.         (sel_start, sel_to) = ctrl.GetSelection()
  54.         select_len = sel_to - sel_start
  55.         allow_event = 1
  56.         set_to_none = 0
  57.         set_to_zero = 0
  58.         set_to_minus_one = 0
  59.         paste = 0
  60.         internally_set = 0
  61.         new_value = value
  62.         new_text = textval
  63.         new_pos = pos
  64.         if key in (WXK_DELETE, WXK_BACK, WXK_CTRL_X):
  65.             if select_len:
  66.                 new_text = textval[:sel_start] + textval[sel_to:]
  67.             elif key == WXK_DELETE and pos < len(textval):
  68.                 new_text = textval[:pos] + textval[pos + 1:]
  69.             elif key == WXK_BACK and pos > 0:
  70.                 new_text = textval[:pos - 1] + textval[pos:]
  71.             
  72.         None if new_text in ('', '-') else None<EXCEPTION MATCH>ValueError
  73.         if key == WXK_CTRL_V:
  74.             paste_text = ctrl._getClipboardContents()
  75.             new_text = textval[:sel_start] + paste_text + textval[sel_to:]
  76.         None if new_text == '' and allow_none else None<EXCEPTION MATCH>ValueError
  77.         if key < WXK_SPACE or key > 255:
  78.             pass
  79.         elif chr(key) == '-':
  80.             if not value is None:
  81.                 if value == 0 and pos == 0 or select_len >= len(str(abs(value))):
  82.                     new_value = -1
  83.                     set_to_minus_one = 1
  84.                 elif pos != 0 and value is not None and value < 0:
  85.                     allow_event = 0
  86.                 else:
  87.                     new_text = '-' + textval
  88.                     new_pos = 1
  89.                     
  90.                     try:
  91.                         new_value = ctrl._fromGUI(new_text)
  92.                     except ValueError:
  93.                         allow_event = 0
  94.                     except:
  95.                         None<EXCEPTION MATCH>ValueError
  96.                     
  97.  
  98.                     None<EXCEPTION MATCH>ValueError
  99.                     if chr(key) in string.digits:
  100.                         if chr(key) == '0' and select_len == 0 and value is not None:
  101.                             if value >= 0 and pos == 0 and value < 0 and pos in [
  102.                                 0,
  103.                                 1]:
  104.                                 allow_event = 0
  105.                             elif value is not None and value < 0 and pos == 0:
  106.                                 allow_event = 0
  107.                             else:
  108.                                 new_text = textval[:sel_start] + chr(key) + textval[sel_to:]
  109.                                 
  110.                                 try:
  111.                                     new_value = ctrl._fromGUI(new_text)
  112.                                 except ValueError:
  113.                                     allow_event = 0
  114.                                 except:
  115.                                     None<EXCEPTION MATCH>ValueError
  116.                                 
  117.  
  118.                                 None<EXCEPTION MATCH>ValueError
  119.                                 allow_event = 0
  120.                                 if allow_event:
  121.                                     if ctrl.IsLimited() and not ctrl.IsInBounds(new_value):
  122.                                         allow_event = 0
  123.                                     elif new_value is not None:
  124.                                         if not set_to_zero and not set_to_minus_one:
  125.                                             if not new_value > 0 and new_text[0] == '0':
  126.                                                 if new_value < 0 and new_text[1] == '0' and new_value == 0 and select_len > 1:
  127.                                                     if key == WXK_BACK and paste and paste_value == 0 and new_pos > 0:
  128.                                                         new_pos = new_pos - 1
  129.                                                     
  130.                                                     wxCallAfter(ctrl.SetValue, new_value)
  131.                                                     wxCallAfter(ctrl.SetInsertionPoint, new_pos)
  132.                                                     internally_set = 1
  133.                                                 elif paste:
  134.                                                     wxCallAfter(ctrl.SetValue, new_value)
  135.                                                     wxCallAfter(ctrl.SetInsertionPoint, new_pos)
  136.                                                     internally_set = 1
  137.                                                 elif new_value == 0 and len(new_text) > 1:
  138.                                                     allow_event = 0
  139.                                                 
  140.                                             
  141.                                         if allow_event:
  142.                                             ctrl._colorValue(new_value)
  143.                                         
  144.                                     
  145.                                 
  146.         if allow_event:
  147.             if set_to_none:
  148.                 wxCallAfter(ctrl.SetValue, new_value)
  149.             elif set_to_zero:
  150.                 wxCallAfter(ctrl.SetValue, new_value)
  151.                 wxCallAfter(ctrl.SetInsertionPoint, 0)
  152.                 wxCallAfter(ctrl.SetSelection, 0, 1)
  153.             elif set_to_minus_one:
  154.                 wxCallAfter(ctrl.SetValue, new_value)
  155.                 wxCallAfter(ctrl.SetInsertionPoint, 1)
  156.                 wxCallAfter(ctrl.SetSelection, 1, 2)
  157.             elif not internally_set:
  158.                 event.Skip()
  159.             
  160.         elif not wxValidator_IsSilent():
  161.             wxBell()
  162.         
  163.  
  164.     
  165.     def TransferToWindow(self):
  166.         return True
  167.  
  168.     
  169.     def TransferFromWindow(self):
  170.         return True
  171.  
  172.  
  173.  
  174. class wxIntCtrl(wxTextCtrl):
  175.     
  176.     def __init__(self, parent, id = -1, value = 0, pos = wxDefaultPosition, size = wxDefaultSize, style = 0, validator = wxDefaultValidator, name = 'integer', min = None, max = None, limited = 0, allow_none = 0, allow_long = 0, default_color = wxBLACK, oob_color = wxRED):
  177.         self._wxIntCtrl__min = None
  178.         self._wxIntCtrl__max = None
  179.         self._wxIntCtrl__limited = 0
  180.         self._wxIntCtrl__default_color = wxBLACK
  181.         self._wxIntCtrl__oob_color = wxRED
  182.         self._wxIntCtrl__allow_none = 0
  183.         self._wxIntCtrl__allow_long = 0
  184.         self._wxIntCtrl__oldvalue = None
  185.         if validator == wxDefaultValidator:
  186.             validator = wxIntValidator()
  187.         
  188.         wxTextCtrl.__init__(self, parent, id, self._toGUI(0), pos, size, style, validator, name)
  189.         EVT_TEXT(self, self.GetId(), self.OnText)
  190.         self.SetBounds(min, max)
  191.         self.SetLimited(limited)
  192.         self.SetColors(default_color, oob_color)
  193.         self.SetNoneAllowed(allow_none)
  194.         self.SetLongAllowed(allow_long)
  195.         self.SetValue(value)
  196.         self._wxIntCtrl__oldvalue = 0
  197.  
  198.     
  199.     def OnText(self, event):
  200.         value = self.GetValue()
  201.         if value != self._wxIntCtrl__oldvalue:
  202.             
  203.             try:
  204.                 self.GetEventHandler().ProcessEvent(wxIntUpdatedEvent(self.GetId(), self.GetValue(), self))
  205.             except ValueError:
  206.                 return None
  207.  
  208.             event.Skip()
  209.         
  210.         self._wxIntCtrl__oldvalue = value
  211.  
  212.     
  213.     def GetValue(self):
  214.         return self._fromGUI(wxTextCtrl.GetValue(self))
  215.  
  216.     
  217.     def SetValue(self, value):
  218.         wxTextCtrl.SetValue(self, self._toGUI(value))
  219.         self._colorValue()
  220.  
  221.     
  222.     def SetMin(self, min = None):
  223.         if self._wxIntCtrl__max is None and min is None and self._wxIntCtrl__max is not None and self._wxIntCtrl__max >= min:
  224.             self._wxIntCtrl__min = min
  225.             if self.IsLimited() and min is not None and self.GetValue() < min:
  226.                 self.SetValue(min)
  227.             else:
  228.                 self._colorValue()
  229.             return 1
  230.         else:
  231.             return 0
  232.  
  233.     
  234.     def GetMin(self):
  235.         return self._wxIntCtrl__min
  236.  
  237.     
  238.     def SetMax(self, max = None):
  239.         if self._wxIntCtrl__min is None and max is None and self._wxIntCtrl__min is not None and self._wxIntCtrl__min <= max:
  240.             self._wxIntCtrl__max = max
  241.             if self.IsLimited() and max is not None and self.GetValue() > max:
  242.                 self.SetValue(max)
  243.             else:
  244.                 self._colorValue()
  245.             return 1
  246.         else:
  247.             return 0
  248.  
  249.     
  250.     def GetMax(self):
  251.         return self._wxIntCtrl__max
  252.  
  253.     
  254.     def SetBounds(self, min = None, max = None):
  255.         ret = self.SetMin(min)
  256.         if ret:
  257.             pass
  258.         return self.SetMax(max)
  259.  
  260.     
  261.     def GetBounds(self):
  262.         return (self._wxIntCtrl__min, self._wxIntCtrl__max)
  263.  
  264.     
  265.     def SetLimited(self, limited):
  266.         self._wxIntCtrl__limited = limited
  267.         if limited:
  268.             min = self.GetMin()
  269.             max = self.GetMax()
  270.             if not (min is None) and self.GetValue() < min:
  271.                 self.SetValue(min)
  272.             elif not (max is None) and self.GetValue() > max:
  273.                 self.SetValue(max)
  274.             
  275.         else:
  276.             self._colorValue()
  277.  
  278.     
  279.     def IsLimited(self):
  280.         return self._wxIntCtrl__limited
  281.  
  282.     
  283.     def IsInBounds(self, value = None):
  284.         if value is None:
  285.             value = self.GetValue()
  286.         
  287.         if value is None:
  288.             pass
  289.         if not self.IsNoneAllowed() and type(value) not in (types.IntType, types.LongType):
  290.             raise ValueError('wxIntCtrl requires integer values, passed %s' % repr(value))
  291.         
  292.         min = self.GetMin()
  293.         max = self.GetMax()
  294.         if min is None:
  295.             min = value
  296.         
  297.         if max is None:
  298.             max = value
  299.         
  300.         if value == None and min is not None or max is not None:
  301.             return 0
  302.         elif value <= value:
  303.             pass
  304.         
  305.         return value <= max
  306.  
  307.     
  308.     def SetNoneAllowed(self, allow_none):
  309.         self._wxIntCtrl__allow_none = allow_none
  310.         if not allow_none and self.GetValue() is None:
  311.             min = self.GetMin()
  312.             if min is not None:
  313.                 self.SetValue(min)
  314.             else:
  315.                 self.SetValue(0)
  316.         
  317.  
  318.     
  319.     def IsNoneAllowed(self):
  320.         return self._wxIntCtrl__allow_none
  321.  
  322.     
  323.     def SetLongAllowed(self, allow_long):
  324.         current_value = self.GetValue()
  325.         if not allow_long and type(current_value) is types.LongType:
  326.             if current_value > 0:
  327.                 self.SetValue(MAXINT)
  328.             else:
  329.                 self.SetValue(MININT)
  330.         
  331.         self._wxIntCtrl__allow_long = allow_long
  332.  
  333.     
  334.     def IsLongAllowed(self):
  335.         return self._wxIntCtrl__allow_long
  336.  
  337.     
  338.     def SetColors(self, default_color = wxBLACK, oob_color = wxRED):
  339.         self._wxIntCtrl__default_color = default_color
  340.         self._wxIntCtrl__oob_color = oob_color
  341.         self._colorValue()
  342.  
  343.     
  344.     def GetColors(self):
  345.         return (self._wxIntCtrl__default_color, self._wxIntCtrl__oob_color)
  346.  
  347.     
  348.     def _colorValue(self, value = None):
  349.         if not self.IsInBounds(value):
  350.             self.SetForegroundColour(self._wxIntCtrl__oob_color)
  351.         else:
  352.             self.SetForegroundColour(self._wxIntCtrl__default_color)
  353.         self.Refresh()
  354.  
  355.     
  356.     def _toGUI(self, value):
  357.         if value is None and self.IsNoneAllowed():
  358.             return ''
  359.         elif type(value) == types.LongType and not self.IsLongAllowed():
  360.             raise ValueError('wxIntCtrl requires integer value, passed long')
  361.         elif type(value) not in (types.IntType, types.LongType):
  362.             raise ValueError('wxIntCtrl requires integer value, passed %s' % repr(value))
  363.         elif self.IsLimited():
  364.             min = self.GetMin()
  365.             max = self.GetMax()
  366.             if not (min is None) and value < min:
  367.                 raise ValueError('value is below minimum value of control %d' % value)
  368.             
  369.             if not (max is None) and value > max:
  370.                 raise ValueError('value exceeds value of control %d' % value)
  371.             
  372.         
  373.         return str(value)
  374.  
  375.     
  376.     def _fromGUI(self, value):
  377.         if value == '':
  378.             if not self.IsNoneAllowed():
  379.                 return 0
  380.             else:
  381.                 return None
  382.         else:
  383.             
  384.             try:
  385.                 return int(value)
  386.             except ValueError:
  387.                 if self.IsLongAllowed():
  388.                     return long(value)
  389.                 else:
  390.                     raise 
  391.             except:
  392.                 self.IsLongAllowed()
  393.  
  394.  
  395.     
  396.     def Cut(self):
  397.         (sel_start, sel_to) = self.GetSelection()
  398.         select_len = sel_to - sel_start
  399.         textval = wxTextCtrl.GetValue(self)
  400.         do = wxTextDataObject()
  401.         do.SetText(textval[sel_start:sel_to])
  402.         wxTheClipboard.Open()
  403.         wxTheClipboard.SetData(do)
  404.         wxTheClipboard.Close()
  405.         if select_len == len(wxTextCtrl.GetValue(self)):
  406.             if not self.IsNoneAllowed():
  407.                 self.SetValue(0)
  408.                 self.SetInsertionPoint(0)
  409.                 self.SetSelection(0, 1)
  410.             else:
  411.                 self.SetValue(None)
  412.         else:
  413.             new_value = self._fromGUI(textval[:sel_start] + textval[sel_to:])
  414.             self.SetValue(new_value)
  415.  
  416.     
  417.     def _getClipboardContents(self):
  418.         do = wxTextDataObject()
  419.         wxTheClipboard.Open()
  420.         success = wxTheClipboard.GetData(do)
  421.         wxTheClipboard.Close()
  422.         if not success:
  423.             return None
  424.         else:
  425.             return do.GetText().strip()
  426.  
  427.     
  428.     def Paste(self):
  429.         paste_text = self._getClipboardContents()
  430.         if paste_text:
  431.             (sel_start, sel_to) = self.GetSelection()
  432.             text = wxTextCtrl.GetValue(self)
  433.             new_text = text[:sel_start] + paste_text + text[sel_to:]
  434.             if new_text == '' and self.IsNoneAllowed():
  435.                 self.SetValue(None)
  436.             else:
  437.                 value = self._fromGUI(new_text)
  438.                 self.SetValue(value)
  439.                 new_pos = sel_start + len(paste_text)
  440.                 wxCallAfter(self.SetInsertionPoint, new_pos)
  441.         
  442.  
  443.  
  444. if __name__ == '__main__':
  445.     import traceback
  446.     
  447.     class myDialog(wxDialog):
  448.         
  449.         def __init__(self, parent, id, title, pos = wxPyDefaultPosition, size = wxPyDefaultSize, style = wxDEFAULT_DIALOG_STYLE):
  450.             wxDialog.__init__(self, parent, id, title, pos, size, style)
  451.             self.int_ctrl = wxIntCtrl(self, wxNewId(), size = (55, 20))
  452.             self.OK = wxButton(self, wxID_OK, 'OK')
  453.             self.Cancel = wxButton(self, wxID_CANCEL, 'Cancel')
  454.             vs = wxBoxSizer(wxVERTICAL)
  455.             vs.AddWindow(self.int_ctrl, 0, wxALIGN_CENTRE | wxALL, 5)
  456.             hs = wxBoxSizer(wxHORIZONTAL)
  457.             hs.AddWindow(self.OK, 0, wxALIGN_CENTRE | wxALL, 5)
  458.             hs.AddWindow(self.Cancel, 0, wxALIGN_CENTRE | wxALL, 5)
  459.             vs.AddSizer(hs, 0, wxALIGN_CENTRE | wxALL, 5)
  460.             self.SetAutoLayout(True)
  461.             self.SetSizer(vs)
  462.             vs.Fit(self)
  463.             vs.SetSizeHints(self)
  464.             EVT_INT(self, self.int_ctrl.GetId(), self.OnInt)
  465.  
  466.         
  467.         def OnInt(self, event):
  468.             print 'int now', event.GetValue()
  469.  
  470.  
  471.     
  472.     class TestApp(wxApp):
  473.         
  474.         def OnInit(self):
  475.             
  476.             try:
  477.                 self.frame = wxFrame(NULL, -1, 'Test', wxPoint(20, 20), wxSize(120, 100))
  478.                 self.panel = wxPanel(self.frame, -1)
  479.                 button = wxButton(self.panel, 10, 'Push Me', wxPoint(20, 20))
  480.                 EVT_BUTTON(self, 10, self.OnClick)
  481.             except:
  482.                 traceback.print_exc()
  483.                 return False
  484.  
  485.             return True
  486.  
  487.         
  488.         def OnClick(self, event):
  489.             dlg = myDialog(self.panel, -1, 'test wxIntCtrl')
  490.             dlg.int_ctrl.SetValue(501)
  491.             dlg.int_ctrl.SetInsertionPoint(1)
  492.             dlg.int_ctrl.SetSelection(1, 2)
  493.             rc = dlg.ShowModal()
  494.             print 'final value', dlg.int_ctrl.GetValue()
  495.             del dlg
  496.             self.frame.Destroy()
  497.  
  498.         
  499.         def Show(self):
  500.             self.frame.Show(True)
  501.  
  502.  
  503.     
  504.     try:
  505.         app = TestApp(0)
  506.         app.Show()
  507.         app.MainLoop()
  508.     traceback.print_exc()
  509.  
  510.  
  511.